﻿#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
//现在有一个长度为 n 的正整数序列，其中只有一种数值出现了奇数次，其他数值均出现偶数次，请你找出那个出现奇数次的数值。
//输入描述：
//第一行：一个整数n，表示序列的长度。第二行：n个正整数ai，两个数中间以空格隔开。
//输出描述：
//一个数，即在序列中唯一出现奇数次的数值。
int cmp(const void* x, const void* y)
{
	return *(int*)x - *(int*)y;
}

//int main()
//{
//	int num = 0, count = 0;
//	scanf("%d", &num);
//	int* arr = (int*)malloc(sizeof(int) * num);
//	for (int i = 0; i < num; i++)//输入num个数到数组里
//	{
//		scanf("%d", &arr[i]);
//	}
//
//	qsort(arr, num, sizeof(int), cmp);//排序
//	int	flag = 1;
//	for (int i = 0, j = i + 1; count < num / 2; i += 2, j += 2, count++)//相同的数会排在一起方便两两匹配，因为题目，
//		//我们知道num为奇数，只有一个奇数次，其它全部为偶数次，两两匹配的偶数次肯定相同
//	{
//		if (arr[i] != arr[j])
//		{
//			printf("%d", arr[i]);
//			flag = 0;
//			break;
//		}
//	}
//
//	if (flag)//判断是否找出奇数次数，如果flag仍然为1，说明我们要找的数就是最后一个数
//	{
//		printf("%d", arr[num - 1]);
//	}
//	free(arr);
//
//	return 0;
//}

//给定一个长度为n的数组nums，请你找到峰值并返回其索引。数组可能包含多个峰值，在这种情况下，返回任何一个所在位置即可。
//1.峰值元素是指其值严格大于左右相邻值的元素。严格大于即不能有等于
//2.假设 nums[-1] = nums[n] =−∞
//3.对于所有有效的 i 都有 nums[i] != nums[i + 1]
//4.你可以使用O(logN)的时间复杂度实现此问题吗？

//题目要求返回任意一个峰值，我们假设有多个峰值，只需要返回找到的第一个就行了
//int findPeakElement(int* nums, int numsLen) 
//{
//	if (nums[0] > nums[1])
//	{
//		return 0;
//	}
//	for (int i = 1; i < numsLen - 1; i++)
//	{
//		if (nums[i] > nums[i - 1] && nums[i] > nums[i + 1])
//		{
//			return i;
//		}
//	}
//	if (nums[numsLen - 1] > nums[numsLen - 2])
//	{
//		return numsLen - 1;
//	}
//	return 0;
//}

//二分查找：
//二分查找的本质是二段性，二分查找过程的本质是对可行区间的压缩。只要满足二段性的问题都可以
//用二分查找的方法，这里的二段性体现在峰值的左边单调增，右边单调减

int findPeakElement(int* nums, int numsLen)
{
	int left = 0, right = numsLen - 1;
	while (left < right)
	{
		int mid = (left + right) / 2;
		if (nums[mid] > nums[mid + 1])//说明在下坡，此时mid可能为峰
		{
			right = mid;
		}
		else//上坡，mid一定不是峰，直接排除mid
		{
			left = mid + 1;
		}
	}
	return left;
}

int main()
{
	unsigned char i = 7;
	int j = 0;
	for (; i > 0; i -= 3)
	{
		++j;
	}
	printf("%d\n", j);
	return 0;
}